﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Facebook;
using System.Web.UI;
using quinielonModel;



/// <summary>
/// Summary description for Utils
/// </summary>
public static class Utils
{
    public static facebookApp getAppInfo()
    {
        quinielonEntities db = new quinielonEntities();
        var info = (from f in db.facebookApp
                    where f.detalle.Equals("chiquiniela")
                    select f).FirstOrDefault();
        //var info = (from f in db.facebookApp
        //            where f.detalle.Equals("chiquinielaDev")
        //            select f).FirstOrDefault();
        db.Dispose();
        return info;
    }

    public static void PostAppWall(string mensaje)
    {
        //Conexion para token de la app
        FacebookOAuthClient FB = new FacebookOAuthClient();
        var fbApp = getAppInfo();
        FB.AppId = fbApp.appId;
        FB.AppSecret = fbApp.appSecret;
        var token = (IDictionary<string, object>)FB.GetApplicationAccessToken();
        //Mensaje
        var fbMensaje = new Dictionary<string, object>();
        fbMensaje["message"] = mensaje;

        //Post en el muro de la app
        FacebookClient FBApp = new FacebookClient((string)token["access_token"]);
        
        FBApp.Post("/"+fbApp+"/feed", fbMensaje);
    }

    public static object PostToGroup(string idGrupo, string mensaje)
    {
        //Conexion para token del usuario

        quinielonEntities db = new quinielonEntities();
        //Yo soy el que publica en el grupo
        var usuario = (from u in db.usuario where u.id_fb.Equals("512041756") select u).FirstOrDefault();
        try
        {
            FacebookClient fbClient = new FacebookClient(usuario.token);

            //Mensaje
            var fbMensaje = new Dictionary<string, object>();
            fbMensaje["message"] = mensaje;
            return fbClient.Post("/" + idGrupo + "/feed", fbMensaje);
        }
        catch (Exception ex)
        {
            return null;
        }
    }

    //Notificación a un usuario
    public static void AppRequest(string fbID, string mensaje)
    {
        //Conexion para token de la app
        FacebookOAuthClient FB = new FacebookOAuthClient();
        var fbApp = getAppInfo();
        FB.AppId = fbApp.appId;
        FB.AppSecret = fbApp.appSecret;
        var token = (IDictionary<string, object>)FB.GetApplicationAccessToken();
        //Mensaje
        var fbMensaje = new Dictionary<string, object>();
        fbMensaje["message"] = mensaje;

        //App request
        try
        {
            FacebookClient FBApp = new FacebookClient((string)token["access_token"]);
            FBApp.Post("/" + fbID + "/apprequests", fbMensaje);
        }
        catch (Exception ex)
        {
        }
    }

    //Notificacion a todos los usuarios
    public static void AppRequest(string mensaje)
    {
        //Conexion para token de la app
        FacebookOAuthClient FB = new FacebookOAuthClient();
        var fbApp = getAppInfo();
        FB.AppId = fbApp.appId;
        FB.AppSecret = fbApp.appSecret;
        var token = (IDictionary<string, object>)FB.GetApplicationAccessToken();
        //Mensaje
        var fbMensaje = new Dictionary<string, object>();
        fbMensaje["message"] = mensaje;

        quinielonEntities db = new quinielonEntities();
        var usuarios = (from u in db.usuario select u).ToList();
        FacebookClient FBApp;
        
        foreach (var u in usuarios)
        {
            try
            {
                FBApp = new FacebookClient(u.token);
                FBApp.Post("/" + u.id_fb + "/apprequests", fbMensaje);
            }
            catch (Exception ex)
            {
               
            }
        }


    }

    public static Control FindControlIterative(Control root, string id)
    {
        Control ctl = root;
        var ctls = new List<Control>();

        while (ctl != null)
        {
            if (ctl.ID == id)
                return ctl;
            foreach (Control child in ctl.Controls)
            {
                if (child.ID == id)
                    return child;
                if (child.HasControls())
                    ctls.Add(child);
            }
            ctl = ctls[0];
            ctls.Remove(ctl);
        }
        return null;
    }

  
}